<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>

  <script>
    /*
      封装时间差函数
        + 问题1: 是否需要参数, 需要几个 ?
          => 目标时间
          => 开始时间
        + 问题2: 是否需要返回值, 什么数据类型 ?
          => 字符串 '100天3小时5分钟4秒'
          => 数组: [ 1, 3, 5, 7 ]
          => 对象: { day: xxx, hours: xxx, minutes: xxx, seconds: xxx }
    */

    function diffTime(start, end) {
      // 1. 拿到两个时间节点之间相差的毫秒数
      // 方案1: 获取到时间节点之间的时间戳 相减
      // var sub = end.getTime() - start.getTime()
      // 方案2: 直接让时间对象相减
      // var sub = end - start
      // 拿到相差的秒, 拿到相差的毫秒 / 1000 取整
      var sub = Math.ceil((end - start) / 1000)

      // 2. 换算出 天 时 分 秒
      var day = Math.floor(sub / (60 * 60 * 24))
      var hours = Math.floor(sub % (60 * 60 * 24) / (60 * 60))
      var minutes = Math.floor(sub % (60 * 60) / 60)
      var seconds = sub % 60

      // 3. 确定返回值
      // 对象赋值的小技巧: 当 key 和 value 一模一样, 并且 value 值是一个变量的时候, 只写一个
      var obj = {
        day, // 等价于 day: day
        hours: hours,
        minutes: minutes,
        seconds: seconds
        // week // 等价于 week: week, 我没有 week 变量就报错
      }

      // 4. 把结果返回出去
      return obj
    }

    // 将来使用的时候
    var target = new Date('2022/3/4 18:00:00')
    var start = new Date()

    // 计算时间差的时候
    var res = diffTime(start, target)
    console.log(res)
  </script>
</body>
</html>
